import redis.clients.jedis.Jedis;
import redis.clients.jedis.SortingParams;

import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;

// StudentManage类
public class StudentManage {
    private Jedis jedis; // Redis客户端对象

    // 构造方法，创建一个Jedis对象并连接到Redis服务器
    public StudentManage() {
        jedis = new Jedis("localhost", 6379);
    }

    // 初始化方法，生成一些学生数据，并存储在Redis中
    public void init() {
        // 创建一个数组，存储一些学生姓名
        String[] names = {"张三", "李四", "王五", "赵六", "孙七", "周八", "吴九", "郑十", "李四", "张三"};
        // 创建一个随机数对象，用于生成随机的成绩
        Random random = new Random();
        // 循环创建学生对象，并存储在Redis中
        for (int i = 0; i < names.length; i++) {
            // 创建一个学生对象，姓名从数组中取，成绩随机生成
            Student student = new Student(names[i], random.nextInt(101), random.nextInt(101));
            // 使用Redis的incr方法，为每个学生生成一个唯一的学号
            int id = jedis.incr("student_id").intValue();
            // 将学号设置到学生对象中
            student.setId(id);
            // 将学生的信息存储在Redis的字符串类型中，使用学号作为键，使用姓名、java成绩、math成绩等作为值，用逗号分隔
            jedis.set("student:" + id, student.getName() + "," + student.getJavaScore() + "," + student.getMathScore());
            // 使用Redis的有序集合(sorted set)类型，将学生的学号作为成员，将学生的java成绩或math成绩作为分数，分别存储在两个不同的有序集合中，用于后续的排序功能
            jedis.zadd("student_by_java", student.getJavaScore(), String.valueOf(id));
            jedis.zadd("student_by_math", student.getMathScore(), String.valueOf(id));
        }
    }
    public void findById(int id){

            if (id<10) {
            String value = jedis.get("student:" + id);
                System.out.println(value);
            String[] values = value.split(",");
                String name = values[0];
                int javaScore = Integer.parseInt(values[1]);
                int mathScore = Integer.parseInt(values[2]);
                // 创建一个学生对象，将学号、姓名、java成绩、math成绩等设置到对象中
                Student student = new Student(name, javaScore, mathScore);
                student.setId(id);
             // 显示学生信息
                System.out.println(student);
        } else if(id>=10){
            System.out.println("查无此人");
        }
    }
    public void sort(String subject, boolean asc) {
        // 判断用户输入的科目是java还是math，如果是java，就使用Redis的zrange或zrevrange方法，从有序集合student_by_java中获取所有学生的学号，按照java成绩的升序或降序排列
        if (subject.equalsIgnoreCase("java")) {
            // 创建一个集合，用于存储学生的学号
            SortingParams sortingParams = new SortingParams();
            //按java成绩降序排序
            sortingParams.desc();
            //按java成绩字段排序
            sortingParams.by("student:*->java");
            //获取排序后的学生key
            List<String> keys = jedis.sort("students", sortingParams);
            //遍历打印学生信息
            for (String key : keys) {
                //获取学生姓名
                String name = jedis.hget(key, "name");
                //获取学生java成绩
                String java = jedis.hget(key, "java");
                //打印学生信息
                System.out.println(name + " : " + java);
            }
            }
        }
    }